package com.tear.language.node;

import java.util.Map;

import net.sf.json.JSONObject;
import ognl.Ognl;

import org.apache.commons.lang.StringUtils;

import com.tear.language.utils.Attrs;
import com.tear.language.utils.TypeUtil;

/**
定义局部变量的操作
def标签有必填属性name，非必填属性if,else，value,if表示当满足条件才赋值，如果if里面表达式是true
 那么就拿value里面的值定义变量并赋值，如果是false就拿else里面的值赋值，如果else属性没有name就相当于是赋值null,如果只有name
 没有value相当于给定义了那么，并赋初值null，赋值都保存在了局部变量中
*/
public class DefNode extends BaseNode {

	@Override
	public boolean parse(Map<String, Object> currParams,Map<String, Object> globalParams, JSONObject obj) throws Exception {
		String name = obj.optString(Attrs.NAME);
		String valueStr = obj.optString(Attrs.VALUE);
	//	String type = obj.optString(Attrs.TYPE);
	//	String format = obj.optString(Attrs.FORMAT);
		Object value = null;
		Map<String, Object> allParams = getAllParams(currParams,globalParams);
		if(valueStr != null) {
			valueStr = TypeUtil.replaceArray(valueStr);
			value = Ognl.getValue(valueStr,allParams);
		}
		String ifStr = obj.optString(Attrs.IF);
		boolean iif = true;
		if(StringUtils.isNotEmpty(ifStr)) {
			ifStr = TypeUtil.replaceArray(ifStr);
			iif = (Boolean)Ognl.getValue(ifStr,allParams);
			if(!iif) {
				String elseStr = obj.optString(Attrs.ELSE);
				if(elseStr != null) {
					Object value1 = Ognl.getValue(elseStr,allParams);
					value = value1;
				}
			}
		}
		//直接放入局部变量
		currParams.put(name, value);
		return true;
	}

}
